HTTP রিকোয়েস্ট মকিং

Web Development - অ্যাঙ্গুলার (Angular) - Angular টেস্টিং |

Angular অ্যাপ্লিকেশনগুলিতে সার্ভারের সাথে ডেটা আদান-প্রদান করার জন্য HttpClient ব্যবহার করা হয়। তবে, প্রকৃত সার্ভার সংযোগের জন্য HTTP রিকোয়েস্ট করার আগে ডেভেলপমেন্ট বা টেস্টিং অবস্থায় HTTP রিকোয়েস্ট মকিং বা HTTP mocking খুবই গুরুত্বপূর্ণ। মকিংয়ের মাধ্যমে আপনি প্রকৃত সার্ভারে রিকোয়েস্ট না পাঠিয়ে শুধুমাত্র পরীক্ষামূলক ডেটা ব্যবহার করে অ্যাপ্লিকেশনটি টেস্ট করতে পারেন। Angular-এ HTTP রিকোয়েস্ট মক করতে প্রধানত HttpClientTestingModule এবং HttpTestingController ব্যবহৃত হয়।


HTTP মকিংয়ের উদ্দেশ্য

  1. ডেভেলপমেন্ট সময় সার্ভার অনুপস্থিতি: যখন আপনি সার্ভার-সাইড ফিচারগুলি টেস্ট করতে চান কিন্তু সার্ভার অ্যাক্সেস না থাকে, তখন HTTP মকিং সাহায্য করে।
  2. ইউনিট টেস্টিং: অ্যাপ্লিকেশন কোডের ইউনিট টেস্টিং করার জন্য HTTP রিকোয়েস্ট মক করা প্রয়োজন, যাতে সার্ভারের সাথে কনেকশন ছাড়া অ্যাপ্লিকেশনের লজিক টেস্ট করা যায়।
  3. ডেটা রেসপন্স টেস্টিং: কখনও কখনও API রেসপন্স মক করতে হয় যাতে আপনি বিভিন্ন ধরনের রেসপন্স (যেমন: 200, 404, 500) টেস্ট করতে পারেন।

Angular-এ HTTP রিকোয়েস্ট মকিং

Angular-এ HTTP রিকোয়েস্ট মক করার জন্য আপনাকে HttpClientTestingModule এবং HttpTestingController ব্যবহার করতে হবে। এগুলি @angular/common/http/testing থেকে আমদানি করতে হবে।


1. HttpClientTestingModule কনফিগারেশন

প্রথমে, HttpClientTestingModule এবং HttpTestingController ইনস্টল করতে হবে:

  1. আপনার টেস্ট ফাইলে মডিউল এবং কন্ট্রোলার আমদানি করুন:
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { TestBed } from '@angular/core/testing';
import { HttpClient } from '@angular/common/http';
import { AppComponent } from './app.component';
  1. TestBed কনফিগার করুন:
describe('AppComponent', () => {
  let httpClient: HttpClient;
  let httpTestingController: HttpTestingController;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule],
      declarations: [AppComponent]
    });

    httpClient = TestBed.inject(HttpClient);
    httpTestingController = TestBed.inject(HttpTestingController);
  });

  afterEach(() => {
    httpTestingController.verify();  // HTTP কন্ট্রোলার ঠিকঠাক বন্ধ হচ্ছে কিনা তা নিশ্চিত করুন।
  });
});

2. HTTP রিকোয়েস্ট মকিং

এখন, HttpTestingController ব্যবহার করে HTTP রিকোয়েস্ট মক করা যেতে পারে।

উদাহরণ ১: GET রিকোয়েস্ট মকিং

ধরা যাক, আপনি একটি GET রিকোয়েস্ট মক করতে চান যা https://api.example.com/data URL থেকে ডেটা ফেচ করবে।

it('should return data for GET request', () => {
  const mockData = { name: 'John Doe', age: 30 };

  // HTTP GET রিকোয়েস্ট কল করুন
  httpClient.get('https://api.example.com/data').subscribe(data => {
    expect(data).toEqual(mockData);  // ডেটা যাচাই করুন
  });

  // HTTP রিকোয়েস্টটি মক করুন
  const req = httpTestingController.expectOne('https://api.example.com/data');
  expect(req.request.method).toEqual('GET');  // রিকোয়েস্ট মেথড চেক করুন
  req.flush(mockData);  // মকড রেসপন্স ফেরত পাঠান
});

এখানে:

  • httpClient.get() মেথডটি HTTP GET রিকোয়েস্ট তৈরি করে।
  • httpTestingController.expectOne() ব্যবহার করা হয়েছে রিকোয়েস্টটি মক করার জন্য এবং এটি শুধুমাত্র একটিমাত্র রিকোয়েস্টের জন্য অপেক্ষা করে।
  • req.flush(mockData) মেথডের মাধ্যমে মক ডেটা ফেরত পাঠানো হয়েছে।

উদাহরণ ২: POST রিকোয়েস্ট মকিং

এখন, POST রিকোয়েস্ট মক করা যাক, যেখানে সার্ভারে কিছু ডেটা পাঠানো হবে।

it('should return data for POST request', () => {
  const postData = { name: 'Jane Doe', age: 28 };
  const mockResponse = { success: true };

  httpClient.post('https://api.example.com/user', postData).subscribe(response => {
    expect(response).toEqual(mockResponse);  // রেসপন্স যাচাই
  });

  const req = httpTestingController.expectOne('https://api.example.com/user');
  expect(req.request.method).toEqual('POST');  // রিকোয়েস্ট মেথড চেক করুন
  expect(req.request.body).toEqual(postData);  // পাঠানো ডেটা চেক করুন
  req.flush(mockResponse);  // মক রেসপন্স ফেরত পাঠান
});

এখানে:

  • httpClient.post() মেথড ব্যবহার করে POST রিকোয়েস্ট তৈরি করা হয়েছে।
  • req.request.body দিয়ে মক ডেটা যাচাই করা হয়েছে।
  • req.flush(mockResponse) মাধ্যমে মক রেসপন্স দেওয়া হয়েছে।

3. Error Handling Test

আপনি যদি HTTP রিকোয়েস্টের জন্য ত্রুটি টেস্ট করতে চান, তাহলে req.flush() মেথডে ত্রুটি যুক্ত করতে পারেন।

it('should handle error response for GET request', () => {
  const mockError = { status: 404, statusText: 'Not Found' };

  httpClient.get('https://api.example.com/data').subscribe(
    data => fail('Expected an error, not data'),
    error => {
      expect(error.status).toEqual(404);
      expect(error.statusText).toEqual('Not Found');
    }
  );

  const req = httpTestingController.expectOne('https://api.example.com/data');
  req.flush('Error', mockError);  // ত্রুটি পাঠানো
});

এখানে:

  • req.flush('Error', mockError) ব্যবহার করে ত্রুটির অবজেক্ট পাঠানো হয়েছে এবং টেস্ট করা হয়েছে কিভাবে ত্রুটি হ্যান্ডেল হয়।

সারাংশ

Angular অ্যাপ্লিকেশনে HTTP রিকোয়েস্ট মক করা একটি শক্তিশালী টুল যা ডেভেলপমেন্ট এবং টেস্টিং প্রক্রিয়া সহজ করে তোলে। HttpClientTestingModule এবং HttpTestingController ব্যবহার করে আপনি সহজেই HTTP রিকোয়েস্ট এবং রেসপন্স মক করতে পারেন, যা অ্যাপ্লিকেশনের লজিক টেস্ট করা এবং ডেভেলপমেন্টে সাহায্য করে।

Content added By
Promotion